package com.miniTwitter.domain;

import java.util.ArrayList;
import java.util.List;

import com.miniTwitter.exceptions.InvalidRelationshipStateException;

public class Usuario {
	
	private String userName;
	private String password;
	private List<Tweet> tweets;
	private List<Relacion> relaciones;
	private List<SolicitudRelacion> solicitudesDeRelacion;
	
	public Usuario(String userName, String password){
		this.userName = userName;
		this.password = password;
		this.tweets = new ArrayList<Tweet>();
		this.relaciones = new ArrayList<Relacion>();
		this.solicitudesDeRelacion = new ArrayList<SolicitudRelacion>();
	}
	
	public void aceptarRelacion(Usuario usuario) throws InvalidRelationshipStateException{
		eliminarSolicitudRelacion(usuario.getUserName());
		
		for(Relacion relacion : usuario.relaciones){
			if(relacion.esDeUsuario(this.getUserName())){
				relacion.pasarAAceptada();
				break;
			}
		}
	}

	public void rechazarRelacion(Usuario usuario) throws InvalidRelationshipStateException{
		eliminarSolicitudRelacion(usuario.getUserName());
		
		for(Relacion relacion : usuario.relaciones){
			if(relacion.esDeUsuario(this.getUserName())){
				relacion.pasarARechazada();
				break;
			}
		}
	}

	public boolean existeSolicitudParaElUsuario(String userName){
		for (SolicitudRelacion solicitudRelacion : this.getSolicitudesDeRelacion()){
			if (solicitudRelacion.esDeUsuario(userName))
				return true;
		}
		return false;
	}
	
	public Boolean sosUsuario(String userName){
		return this.userName.equals(userName);
	}
	
	public Boolean existeRelacion(Usuario usuario){
		for(Relacion relacion : this.relaciones){
			if (relacion.getSigueA() == usuario)
				return true;
		}
		return false;
	}
	
	private void eliminarSolicitudRelacion(String userName){
		for (SolicitudRelacion solicitudRelacion : this.getSolicitudesDeRelacion()){
			if (solicitudRelacion.esDeUsuario(userName)){
				this.solicitudesDeRelacion.remove(solicitudRelacion);
				break;
			}
		}
	}
	
	
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<Tweet> getTweets() {
		return tweets;
	}

	public void setTweets(List<Tweet> tweets) {
		this.tweets = tweets;
	}

	public List<Relacion> getRelaciones() {
		return relaciones;
	}

	public void setRelaciones(List<Relacion> relaciones) {
		this.relaciones = relaciones;
	}

	public List<SolicitudRelacion> getSolicitudesDeRelacion() {
		return solicitudesDeRelacion;
	}

	public void setSolicitudesDeRelacion(
			List<SolicitudRelacion> solicitudesDeRelacion) {
		this.solicitudesDeRelacion = solicitudesDeRelacion;
	}

}
